#ifndef VIDFRAME_H
#define VIDFRAME_H

//Библиотека ffmpeg.
extern "C" {
#include <libavformat/avformat.h>
};


//Библиотека OpenCV.
#include <opencv/cv.h>


//Библиотека Qt.
#include <QObject>
#include <QSize>


class VidFrame : public QObject
{
public:
	//Конструктор.
	VidFrame(QObject *parent = NULL);

	//Деструктор.
	~VidFrame();

	//Функция установки V4L2-видеоформата.
	void setV4L2PixFormat(int v4l2pixfmt);

	//Функция возврата V4L2-видеоформата.
	int getV4L2PixFormat();

	//Функция установки FFMPEG-видеоформата.
	void setFFMPEGPixFormat(PixelFormat ffmpegpixfmt);

	//Функция возврата FFMPEG-видеоформата.
	PixelFormat getFFMPEGPixFormat();

	//Функция установки видеоразрешения.
	void setResolution(QSize res);

	//Функция возврата видеоразрешения.
	QSize getResolution();

	//Функция возврата параметра видеоразрешения.
	int getWidth();

	//Функция возврата параметра видеоразрешения.
	int getHeight();

	//Функция установки видеобуфера.
	void setBuffer(uchar *vdata, size_t len);

	//Функция возврата указателя на видеокадр.
	uchar *getData();

	//Функция возврата указателя на видеокадр.
	uchar *getDeinterlacedData();

	//Функция возврата размера видеобуфера.
	size_t getLength();

	//Функция возврата видеокадра в представлении OpenCV.
	IplImage *getCVImage();

	//Функция рисования текста на видеокадре.
	void drawText(QString text, int x, int y);

	//Функция удаления чересстрочности видеокадра.
	void deinterlace();

	//Функция конвертации V4L2-видеоформата в FFMPEG-видеоформат.
	static PixelFormat convertV4L2ToFFMPEGPixFormat(int v4l2pixfmt);

private:
	int v4l2PixFmt;

	PixelFormat ffmpegPixFmt;

	QSize resolution;

	uchar *vData, *deinterlacedData;
	size_t length;

	//Изображение в представлении OpenCV.
	IplImage *cvImage;

	//Шрифт для вывода текста на видеокадре.
	CvFont cvFont;

};

#endif
